const htmlparser = require('htmlparser2')   //html的AST类库


class TemplateParser {
    /**
     * HTML文本转AST方法
     * @param text
     * @returns {Promise}
     */
    parse(text){
        return new Promise((resolve, reject) => {
            //先初始化一个domHandler
            const handler = new htmlparser.DomHandler((error, dom)=>{
                if (error) {
                    reject(error);
                } else {
                    //在回调里拿到AST对象  
                    resolve(dom);
                }
            });
            //再初始化一个解析器
            const parser = new htmlparser.Parser(handler);
            //再通过write方法进行解析
            parser.write(text);
            parser.end();
        });
    }

    /**
   * AST转文本方法
   * @param ast
   * @returns {string}
   */
    astToString (ast) {
        let str = '';
        for(let i=0; i< ast.length; i++) {
            
        }
        ast.forEach(item => {
            if (item.tag === 'comment') {
                str += ('<!--' + item.data + '-->')
            }
            if (item.type === 'text') {
                str += item.data;
            } 
            if (item.type === 'tag') {
                str += '<' + item.name;
                if (item.attribs) {
                    Object.keys(item.attribs).forEach(attr => {
                        if (item.attribs[attr]) {
                            str += ` ${attr}="${item.attribs[attr]}"`;
                        }else{
                            str += ` ${attr}`
                        }
                    });
                }
                str += '>';
                if (item.children && item.children.length) {
                    str += this.astToString(item.children);
                }
                str += `</${item.name}>`;
            }
        });
        return str;
    }
}

module.exports = TemplateParser